package com.ys.nms.module.business.controller.admin.devices.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDateTime;

@Schema(description = "管理后台 - 设备新增/修改 Request VO")
@Data
public class DevicesSaveReqVO {

    @Schema(description = "device_id", requiredMode = Schema.RequiredMode.REQUIRED, example = "16861")
    private Integer deviceId;

    @Schema(description = "插入时间")
    private LocalDateTime inserted;

    @Schema(description = "IP地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
    @NotEmpty(message = "IP地址不能为空")
    private String hostname;

    @Schema(description = "系统名称", example = "李四")
    private String sysName;

    @Schema(description = "显示名称")
    private String display;

    @Schema(description = "ip")
    private byte[] ip;

    @Schema(description = "overwrite_ip")
    private String overwriteIp;

    @Schema(description = "SNMP社区字符串")
    private String community;

    @Schema(description = "认证级别")
    private String authlevel;

    @Schema(description = "authname", example = "李四")
    private String authname;

    @Schema(description = "authpass")
    private String authpass;

    @Schema(description = "认证算法")
    private String authalgo;

    @Schema(description = "加密密码")
    private String cryptopass;

    @Schema(description = "加密算法")
    private String cryptoalgo;

    @Schema(description = "SNMP版本", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "SNMP版本不能为空")
    private String snmpver;

    @Schema(description = "port", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "port不能为空")
    private Short port;

    @Schema(description = "传输协议", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotEmpty(message = "传输协议不能为空")
    private String transport;

    @Schema(description = "timeout")
    private Integer timeout;

    @Schema(description = "重试次数")
    private Integer retries;

    @Schema(description = "是否启用snmp，0为启用，其他为禁用", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "是否启用snmp，0为启用，其他为禁用不能为空")
    private Boolean snmpDisable;

    @Schema(description = "BGP本地自治系统号")
    private Integer bgpLocalAs;

    @Schema(description = "sysObjectID", example = "9239")
    private String sysObjectID;

    @Schema(description = "系统描述")
    private String sysDescr;

    @Schema(description = "默认系统联系人")
    private String sysContact;

    @Schema(description = "版本")
    private String version;

    @Schema(description = "硬件")
    private String hardware;

    @Schema(description = "特征")
    private String features;

    @Schema(description = "操作系统", example = "7707")
    private Integer locationId;

    @Schema(description = "操作系统")
    private String os;

    @Schema(description = "状态，1为在线，其他为离线", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @NotNull(message = "状态，1为在线，其他为离线不能为空")
    private Boolean status;

    @Schema(description = "status_reason", requiredMode = Schema.RequiredMode.REQUIRED, example = "不喜欢")
    @NotEmpty(message = "status_reason不能为空")
    private String statusReason;

    @Schema(description = "ignore", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "ignore不能为空")
    private Boolean ignore;

    @Schema(description = "0为不禁止，其他为禁止", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "0为不禁止，其他为禁止不能为空")
    private Boolean disabled;

    @Schema(description = "系统运行时间")
    private Long uptime;

    @Schema(description = "代理运行时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "代理运行时间不能为空")
    private Integer agentUptime;

    @Schema(description = "最后轮询时间")
    private LocalDateTime lastPolled;

    @Schema(description = "最后轮询尝试时间")
    private LocalDateTime lastPollAttempted;

    @Schema(description = "最后轮询耗时")
    private Double lastPolledTimetaken;

    @Schema(description = "最后发现耗时")
    private Double lastDiscoveredTimetaken;

    @Schema(description = "最后发现时间")
    private LocalDateTime lastDiscovered;

    @Schema(description = "最后Ping时间")
    private LocalDateTime lastPing;

    @Schema(description = "最后Ping耗时")
    private Double lastPingTimetaken;

    @Schema(description = "用途")
    private String purpose;

    @Schema(description = "type", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @NotEmpty(message = "type不能为空")
    private String type;

    @Schema(description = "序列号")
    private String serial;

    @Schema(description = "icon")
    private String icon;

    @Schema(description = "轮询组", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "轮询组不能为空")
    private Integer pollerGroup;

    @Schema(description = "是否覆盖系统位置")
    private Boolean overrideSyslocation;

    @Schema(description = "notes")
    private String notes;

    @Schema(description = "端口关联模式", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "端口关联模式不能为空")
    private Integer portAssociationMode;

    @Schema(description = "最大深度", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "最大深度不能为空")
    private Integer maxDepth;

    @Schema(description = "是否禁用通知", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "是否禁用通知不能为空")
    private Boolean disableNotify;

    @Schema(description = "是否忽略状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @NotNull(message = "是否忽略状态不能为空")
    private Boolean ignoreStatus;

    @Schema(description = "quyu")
    private Integer quyu;

    @Schema(description = "子区域")
    private Integer quyusub;

    @Schema(description = "tag1")
    private String tag1;

    @Schema(description = "tag2")
    private String tag2;

    @Schema(description = "tag3")
    private String tag3;

    @Schema(description = "tag4")
    private String tag4;

    @Schema(description = "tag5")
    private String tag5;

    @Schema(description = "tag6")
    private String tag6;

    @Schema(description = "tag7")
    private String tag7;

    @Schema(description = "tag8")
    private String tag8;

    @Schema(description = "tag9")
    private String tag9;

    @Schema(description = "tag10")
    private String tag10;

    @Schema(description = "tag11")
    private String tag11;

    @Schema(description = "tag12")
    private String tag12;

    @Schema(description = "tag13")
    private String tag13;

    @Schema(description = "xianlu")
    private String xianlu;

    @Schema(description = "SNMP启用状态")
    private String snmpyes;

    @Schema(description = "类型名称", example = "张三")
    private String typeName;

    @Schema(description = "拓扑图x")
    private BigDecimal x;

    @Schema(description = "拓扑图y")
    private BigDecimal y;

}